package waitandnotify;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 74646
 * Date: 2022-05-08
 * Time: 21:50
 */
public class Demo1 {
    public static void main(String[] args) {
        Object object = new Object();
        // wait 哪个对象，就对哪个对象加锁
        synchronized (object){
            System.out.printf("wait 前");
            /**
             * 调用wait就会发生阻塞
             * 此处会抛出 illegalMonitorStateException 异常 非法的监视器(锁)状态异常
             * wait 内部会做三件事：
             *         1、先释放锁
             *         2、等待其他线程的通知
             *         3、收到通知后重新获取锁，并继续往下执行
             * 因此使用 wait 或 notify 就需要搭配 synchronized
             */
            try {
                object.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.printf("wait 后");
        }
    }
}
